<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
<meta name="viewport"
      content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">

    <meta name="author" content="kissdata">


    <meta name="subtitle" content="人生笔记">


    <meta name="description" content="南邮计算机学院2021毕业生王鹏的介绍，cs软件工程专业">


    <meta name="keywords" content="wangpeng 王鹏 南邮 南京">


<title>Category: knowledge | 王鹏的小岛</title>



    <link rel="icon" href="/myIcon.ico">




    <!-- stylesheets list from _config.yml -->
    
    <link rel="stylesheet" href="/css/style.css">
    



    <!-- scripts list from _config.yml -->
    
    <script src="/js/script.js"></script>
    
    <script src="/js/tocbot.min.js"></script>
    



    
    
        <!-- MathJax配置，可通过单美元符号书写行内公式等 -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
    "HTML-CSS": {
        preferredFont: "TeX",
        availableFonts: ["STIX","TeX"],
        linebreaks: { automatic:true },
        EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50)
    },
    tex2jax: {
        inlineMath: [ ["$", "$"], ["\\(","\\)"] ],
        processEscapes: true,
        ignoreClass: "tex2jax_ignore|dno",
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    },
    TeX: {
        equationNumbers: { autoNumber: "AMS" },
        noUndefined: { attributes: { mathcolor: "red", mathbackground: "#FFEEEE", mathsize: "90%" } },
        Macros: { href: "{}" }
    },
    messageStyle: "none"
    });
</script>
<!-- 给MathJax元素添加has-jax class -->
<script type="text/x-mathjax-config">
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax(), i;
        for(i=0; i < all.length; i += 1) {
            all[i].SourceElement().parentNode.className += ' has-jax';
        }
    });
</script>
<!-- 通过连接CDN加载MathJax的js代码 -->
<script type="text/javascript" async
        src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML">
</script>


    


<meta name="generator" content="Hexo 7.0.0"></head>

<body>
    <script>
        // this function is used to check current theme before page loaded.
        (() => {
            const currentTheme = window.localStorage && window.localStorage.getItem('theme') || '';
            const isDark = currentTheme === 'dark';
            const pagebody = document.getElementsByTagName('body')[0]
            if (isDark) {
                pagebody.classList.add('dark-theme');
                // mobile
                document.getElementById("mobile-toggle-theme").innerText = "· Dark"
            } else {
                pagebody.classList.remove('dark-theme');
                // mobile
                document.getElementById("mobile-toggle-theme").innerText = "· Light"
            }
        })();
    </script>

    <div class="wrapper">
        <header>
    <nav class="navbar">
        <div class="container">
            <div class="navbar-header header-logo"><a href="/">侠之大者</a></div>
            <div class="menu navbar-right">
                
                    <a class="menu-item" href="/update/mystate">Career</a>
                
                    <a class="menu-item" href="/category">Legend</a>
                
                    <a class="menu-item" href="/about">Me</a>
                
                <input id="switch_default" type="checkbox" class="switch_default">
                <label for="switch_default" class="toggleBtn"></label>
            </div>
        </div>
    </nav>

    
    <nav class="navbar-mobile" id="nav-mobile">
        <div class="container">
            <div class="navbar-header">
                <div>
                    <a href="/">侠之大者</a><a id="mobile-toggle-theme">·&nbsp;Light</a>
                </div>
                <div class="menu-toggle" onclick="mobileBtn()">&#9776; Menu</div>
            </div>
            <div class="menu" id="mobile-menu">
                
                    <a class="menu-item" href="/update/mystate">Career</a>
                
                    <a class="menu-item" href="/category">Legend</a>
                
                    <a class="menu-item" href="/about">Me</a>
                
            </div>
        </div>
    </nav>

</header>
<script>
    var mobileBtn = function f() {
        var toggleMenu = document.getElementsByClassName("menu-toggle")[0];
        var mobileMenu = document.getElementById("mobile-menu");
        if(toggleMenu.classList.contains("active")){
           toggleMenu.classList.remove("active")
            mobileMenu.classList.remove("active")
        }else{
            toggleMenu.classList.add("active")
            mobileMenu.classList.add("active")
        }
    }
</script>
            <div class="main">
                <div class="container">
    <article class="post-wrap page">
        
        <h2 class="post-title">网络层协议</h2>
        
        <section class="post-content">
            <p>[TOC]</p>
<h1 id="1-IP地址"><a href="#1-IP地址" class="headerlink" title="1. IP地址"></a>1. IP地址</h1><h2 id="1-1-分类表示法"><a href="#1-1-分类表示法" class="headerlink" title="1.1 分类表示法"></a>1.1 分类表示法</h2><p>分类表示法已经不常用了。需要记住</p>
<ul>
<li><p>自己平常使用的 <code>192.168.xx.xx</code> 是C类(192~223) </p>
</li>
<li><p>公司电脑使用的内网 <code>127.16.0.xx</code> 是B类</p>
</li>
<li><p>项目开发运行的 localhost 或者 <code>127.0.0.1</code> 是 A 类，又名 <strong>还回地址</strong></p>
</li>
<li><p>这样以 255结尾的 （类似<code>xxx.xx.xx.255</code> ，即主机号为1）的ip都是广播地址，不能分配</p>
</li>
</ul>
<hr>
<p>10、172、192 这三类开头的地址，几乎是私有地址。<strong>私有地址可以重复出现在不同公司内部。</strong> 比如你在公司用的192.168.1.12，你朋友在另一家公司用的碰巧也是192.168.1.12，可以聊天，因为你俩的 ip 不会冲突，你们处于不同组织内部。</p>
<p><img src="https://img-blog.csdnimg.cn/20200612113432380.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N1cGVyaXQ0MDE=,size_10,color_FFFFFF,t_90"></p>
<blockquote>
<p><em>Note:</em> 实习的时候，联调，有一次填写 pulsar 地址，把 127 写错了 172 开头，检查半天，没有看出来。还是刘xi来发现的。</p>
</blockquote>
<h2 id="1-2-无分类编址CIDR"><a href="#1-2-无分类编址CIDR" class="headerlink" title="1.2 无分类编址CIDR"></a>1.2 无分类编址CIDR</h2><p>Classless Inter-Domain Routing 无类型域间选路</p>
<ul>
<li>CIDR将路由集中起来，使一个IP地址代表主要骨干提供商服务的几千个IP地址，从而减轻Internet路由器的负担。</li>
<li>该编址用于子网划分，子网号和上面提到的网络号是不同的。</li>
<li>IP地址 ::&#x3D; {&lt;网络号&gt;， &lt;子网号&gt;， &lt;主机号&gt;}</li>
</ul>
<p>CIDR有三种编址方式：</p>
<ul>
<li>128.14.35.7&#x2F;20 ， 完整ip加子网位数</li>
<li>10.0.0.0&#x2F;10 -&gt; 10&#x2F;10， 可省略末尾的0</li>
<li>00010100*， 即用星号代替子网后的主机号</li>
</ul>
<p>对于CIDR编址<br>子网号的全0和全1没有特殊含义，但不可设置成全0或者全1。<br>主机号的全0指本网络， 全1指广播。（网络号仍然遵从ABCD地址的规则）</p>
<ul>
<li>子网掩码：<br>值1的位置指该ip中该位置是网络号和子网号区域<br>值0的位置指该ip中该位置是主机号区域。<br>例子：111111100000000…， 那么前面8个1就是网络号+子网号，后面都代表了主机号</li>
<li>路由寻址时，一般先比较网络号，再比较子网号，再比较主机。<br>子网掩码可以简化先比网络再比子网的过程。</li>
</ul>
<h1 id="2-IP数据报文格式"><a href="#2-IP数据报文格式" class="headerlink" title="2 IP数据报文格式"></a>2 IP数据报文格式</h1><p>IP报文的首部至少有20个字节（160位），首部长度最多可以位60字节，所以任选项最多40字节</p>
<p>报文总长度最大为65535， 但是由于MTU的限制（链路层防冲突机制导致的），一般都要做分片， 分片后就会用上分片标识和片偏移了。</p>
<hr>
<p><strong>🗨Q: IP报文里有什么？可以不按顺序或者字节来讲一讲</strong></p>
<p>A:</p>
<ul>
<li>首先要知道报文多长， 首部长度+报文长度</li>
<li>为了校验首部，还需要校验首部和</li>
<li>很重要的源ip 目的ip<br>那么如何确定ip类型？这就需要 ipv版本，来确认是ip4还是ip6。</li>
<li>ip支持分片，那么就需要<br>分片id、是否是最后分片标记、分片偏移</li>
<li>协议类型（icmp、igmp）</li>
<li>TTL生存</li>
<li>其他任选项（40字节）</li>
</ul>
<h1 id="3-路由概念"><a href="#3-路由概念" class="headerlink" title="3. 路由概念"></a>3. 路由概念</h1><ul>
<li>路由器可分隔广播域，指的是不同网络号的地址，路由器不会转发广播报文</li>
</ul>
<blockquote>
<p>Hub集线器在同一个冲突域通信无法分割；交换机在同一个广播域通信，可分割冲突域；路由器实现不同广播域间通信，可分隔广播域。</p>
</blockquote>
<ul>
<li>IP报文在传输中不会被改变，但是链路层报文的mac地址会不断变化。</li>
<li>当2个主机在不同的子网时，必须要借助路由才能通信</li>
</ul>
<h2 id="3-1-路由表"><a href="#3-1-路由表" class="headerlink" title="3.1 路由表"></a>3.1 路由表</h2><p>假设某个路由器在N1网络，他的路由表如下：</p>
<table>
<thead>
<tr>
<th>目的网络</th>
<th>下一跳地址</th>
<th>解释</th>
<th>到目的网络距离</th>
</tr>
</thead>
<tbody><tr>
<td>N1</td>
<td>0.0.0.0</td>
<td>假设目的网络就是路由器所在网络，说明可以直接交付给本网络的主机了，不用再转发，所以地址为全0</td>
<td>0</td>
</tr>
<tr>
<td>N2</td>
<td>R2</td>
<td>如果为N2，则会发给R2路由</td>
<td>4</td>
</tr>
<tr>
<td>0.0.0.0</td>
<td>R1默认路由</td>
<td>如果路由表找不到目的网络，则会默认转给R1处理，0.0.0.0是默认转发网络的标识</td>
<td>？</td>
</tr>
<tr>
<td>特定IP地址</td>
<td>R3</td>
<td>这种特定地址的选择是管理员配置的</td>
<td>3</td>
</tr>
</tbody></table>
<ul>
<li>特定IP地址的子网掩码为全1，所以一般都是x.x.x.x&#x2F;32</li>
<li>DNS服务器一般会配置在路由表中的特定IP地址</li>
<li>未知网络在路由表里的目的网络被写为0.0.0.0， 如果么有，则就是未设置默认路由</li>
<li>路由器不会转发私有地址。</li>
<li>距离指的是跨越路由器的数量，而不是实际长度单位</li>
</ul>
<h2 id="3-2-路由网络匹配"><a href="#3-2-路由网络匹配" class="headerlink" title="3.2 路由网络匹配"></a>3.2 路由网络匹配</h2><p>如果路由表中的目的网络由很多，怎么确定IP和路由表中的目的网络是匹配的？<br>使用 最长前缀匹配， 即前缀匹配得最多的就是目的网络。<br>优化算法可用二叉线索树来确认最长前缀。</p>
<hr>
<p><strong>🗨Q: 为什么要用二叉线索树来 判断最长匹配前缀？ 字典树不可以吗？</strong><br>A:</p>
<h2 id="3-3-ARP解析"><a href="#3-3-ARP解析" class="headerlink" title="3.3 ARP解析"></a>3.3 ARP解析</h2><p>全称Address Resolution Protocol，地址解析协议。</p>
<p>从主机发给路由， 或者路由发给路由时，底层还是得封装一层mac地址然后往下交给交换机。<br>那么ip和mac地址的对应关系， 是怎么得知的？<br>答案就是ARP协议</p>
<p>本质就是当mac缓存表里没有ip和mac的对应关系时， 主机或者路由会广播ARP报文， 对应ip方向的交换机会把报文发送回来，这时候就直到mac地址和ip的对饮关系了。</p>
<ul>
<li>arp -a可以检查ARP告诉缓存</li>
<li>ARP缓存有超时时间</li>
<li>目的主机不存在时，会反复发送，有个超期期限的存在。</li>
<li>主机发送ARP查找自己的Mac地址称为“免费ARP”</li>
<li>发送给某1主机的arp请求被中间路由器接收了，则称为“ARP代理”， 发送者不管不管你是中间路由还是目的ip主机，只知道这个ip需要发给这个mac。</li>
</ul>
<h2 id="3-4-RARP逆地址解析协议"><a href="#3-4-RARP逆地址解析协议" class="headerlink" title="3.4 RARP逆地址解析协议"></a>3.4 RARP逆地址解析协议</h2><p>由mac地址反取ip。<br>因为ip不存在，无法直接转给给路由。所以会比ARP难。<br>过程：<br>1）将源设备和目标设备的MAC地址字段都设为发送者的MAC地址和IP地址，发送主机发送一个本地的RARP广播，能够到达网络上的所有设备，在此广播包中，声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址；<br>? 2）本地网段上的RARP服务器收到此请求后，检查其RARP列表，查找该MAC地址对应的IP地址；<br>? 3）如果存在，RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用；如果不存在，RARP服务器对此不做任何的响应；<br>? 4） 源主机收到从RARP服务器的响应信息，就利用得到的IP地址进行通讯；如果一直没有收到RARP服务器的响应信息，表示初始化失败。</p>
<h1 id="4-ICMP协议"><a href="#4-ICMP协议" class="headerlink" title="4 ICMP协议"></a>4 ICMP协议</h1><p>考填空，要记得：</p>
<ul>
<li><p>英文 Internet control message protocl</p>
</li>
<li><p>全名 <strong>网络控制报文协议</strong></p>
</li>
<li><p>属于 网络层协议</p>
</li>
<li><p>用途 发送控制消息，提供可能发生在通信环境中的各种问题反馈，通过这些信息，使网络管理者可以对所发生的问题作出诊断，然后采取适当的措施解决问题。</p>
</li>
<li><p>实现举例 ■ ping命令 ■ traceroute命令</p>
</li>
</ul>
<h2 id="4-1-原理"><a href="#4-1-原理" class="headerlink" title="4.1 原理"></a>4.1 原理</h2><p>他会包装在IP的数据报文中，并把首部的协议类型改成ICMP那个数字。</p>
<p><img src="https://pic1.zhimg.com/80/v2-ef5b42aff92acc5a8873d946d48177e4_1440w.webp"></p>
<p>ICMP <code>首部</code> 总共8个字节，分别为 2字节的ICMP类型、2字节的ICMP报文代码（类似错误码）和 4字节的校验和。<br>后面就是数据部分了。</p>
<h2 id="4-2-ICMP-的2种用途"><a href="#4-2-ICMP-的2种用途" class="headerlink" title="4.2 ICMP 的2种用途"></a>4.2 ICMP 的2种用途</h2><ol>
<li>发送网络层之间的差错报告，例如：<ul>
<li>源点抑制——发送网络拥塞</li>
<li>终点不可达——无法找到对应ip交付地点</li>
<li>时间超时——报文种的TTL降为0，或者分片一直没收集完</li>
<li>参数错误——首部中字段有错</li>
<li>路由改变（重定向）——　主机把数据发给了路由器R2，但是路由器R2发现主机自己本来就可以直达了，于是发给主机该消息，告诉他你要更新路由表了。</li>
</ul>
</li>
</ol>
<p>差错报告有以下其他特点：</p>
<ul>
<li>ICMP自身出错时，不会再发ICMP差错报文<ul>
<li>如果是报文分配后发生错误，则只会发1次，而不会每个分片发一次</li>
<li>不针对多播，不针对127.0.0.1、0.0.0.0等特殊的地址发送差错报文，不可广播（避免广播风暴）</li>
</ul>
</li>
</ul>
<ol start="2">
<li><p>发送一些询问报文，例如：</p>
<ul>
<li><p>回送请求和应答——例如ping命令就是借助ICMP</p>
</li>
<li><p>超时报文——traceroute就是用这个，把TTL从1慢慢增加，发好多份，通过TTL为0时的差错报告，定位跟踪路上有哪些路由</p>
</li>
<li><p>时间戳请求——同步时间</p>
</li>
</ul>
</li>
</ol>
<h1 id="5-DHCP协议"><a href="#5-DHCP协议" class="headerlink" title="5 DHCP协议"></a>5 DHCP协议</h1><p>全称Dynamic Host Configuration Protocol， 动态主机配置协议</p>
<p>当某个局域网内新增了一台主机，这个主机的ip是怎么生成的呢？这就会用到DHCP协议</p>
<p>主机所在网内会有一台DCHP服务器。<br>当新主机加入时，发生如下之事：</p>
<ol>
<li>主机先“广播”自己，告诉大家“我来了，谁给我一个IP地址”（他一开始不知道DHCP在哪）</li>
<li>DCHP服务器收到后，会分配一个IP地址，但因为不知道发给谁，所以也只能“广播”，告诉大家“我这有个ip，刚才谁要的，自己来领一下”</li>
<li>主机收到DHCP广播的报文后，就能知道自己的ip和dhcp服务器位置了。于是给DCHP服务器发送请求，告诉他“我收到了你发来的ip了”</li>
<li>DCHP收到后，确认了他的信息，并加入到DHCP本地的数据库中，后面分配新ip时就会排除掉这个ip了。</li>
</ol>
<p>有以下几个注意点：</p>
<ol>
<li>如果有多个主机同时应答了DHCP的广播， 则会选择最先到达的做分配。</li>
<li>分配的ip是临时的</li>
</ol>
<p><strong>DCHP可以认为是基于UDP的应用层协议，但本质是为了寻求新主机的动态ip地址</strong></p>
<h1 id="6-路由表的最优下一跳地址如何计算？"><a href="#6-路由表的最优下一跳地址如何计算？" class="headerlink" title="6.路由表的最优下一跳地址如何计算？"></a>6.路由表的最优下一跳地址如何计算？</h1><p>可以理解为 在一个复杂的拓扑图下， 怎么选择最优的一个路由做目的地址的下一跳。<br>有2种方式：</p>
<h2 id="6-1-RIP协议"><a href="#6-1-RIP协议" class="headerlink" title="6.1 RIP协议"></a>6.1 RIP协议</h2><p>全称Routing Information Protocol,路由信息协议<br>是一种动态路由信息协议。</p>
<ul>
<li>路由只会和相邻的其他路由交换信息。</li>
<li>交换的是路由表的信息，关键在于目的网络和距离</li>
<li>之前路由表里知道了表里会存储 到目的网络的距离即跨越路由数量，那么只要拿到周边所有路由的距离表， 看下哪个方向最小， 然后把下一跳地址选为最小的那个路由方向即可。</li>
<li>使用UDP广播，把自己的路由报文发给周边的其他路由。</li>
<li>当路径不可达时，会导致2个路由之间不断叠加该目的地址的距离，直到16时，会被设置成不可达。</li>
</ul>
<p>所以RIP本质也是基于UDP的应用层协议，但是目的是为了网络层的最优路由选取。</p>
<h2 id="6-2-OSPF协议"><a href="#6-2-OSPF协议" class="headerlink" title="6.2 OSPF协议"></a>6.2 OSPF协议</h2><p>open shortest path first，开放最短路径优先协议<br>指路由器里有全网的拓扑结构，使用最短路算法计算最优路由<br>因此路由会把自己的连接情况通过OSPF协议发给所有其他路由，以建立拓扑图。<br>这个是属于IP层的协议，不借助UDP。</p>
<hr>
<p>RIP和OSPF是自治网络系统AS里的选路措施。<br>AS里的选路措施被称作IGP（内部网关协议）<br>1个AS里只会有一种选路措施。</p>
<p>而跨自治系统的协议叫EGP（外部网关协议）<br>通常使用BGP协议</p>
<hr>
<h2 id="6-3-BGP协议"><a href="#6-3-BGP协议" class="headerlink" title="6.3 BGP协议"></a>6.3 BGP协议</h2><p>Border Gateway Protocol边界网关协议</p>
<ul>
<li>每个AS都知道自己为了到达网络N，需要经过哪些AS（相当于知道以AS为节点的拓扑图）</li>
<li>每个AS都有一个BGP发言人,会与其他BGP网络之间交换自身的AS拓扑信息，从而构建全局连通图</li>
<li>使用TCP 179端口工作</li>
</ul>
<hr>
<p><strong>🗨Q: RIP协议下路由表什么时候更新？</strong></p>
<p>A:</p>
<ul>
<li>正常情况下，路由器会基于更新计时器每30s将路由表发送给邻居路由器，而触发更新是立刻发送路由更新信息</li>
<li>触发更新就是当检测到网络拓扑发生变动时，路由器会立即发送一个更新信息给邻居路由器，并依次产生触发更新通知它们的邻居路由器，此过程就叫触发更新</li>
</ul>
<p><strong>🗨Q: 路由中毒是什么？</strong></p>
<p>A:<br>路由中毒是指在路由信息在路由表中失效时，先将度量值变为无穷大的数，而不是马上从路由表中删掉这条路由信息。 然后再将中毒路由信息发布出去，当相邻的路由器收到该中毒路由就可以通过其度量值是16，说明该路由是无效的。</p>
<p>??因为RIP协议中的度量值其实就是跳数，而RIP协议的跳数最大是15，大于15的目的地被认为是不可达，所以当其度量值为16，就表示这是一个无效路由，这就是所谓的路由中毒，这个数字在限制了网络大小的同时也防止了一个叫做“记数到无穷大”的问题。</p>
<p><strong>🗨Q: 收到中毒路由的路由器会怎么做？</strong></p>
<p>A:<br>收到中毒路由信息的相邻的路由器会发送一个毒性逆转的信息，表示已经收到中毒路由信息。</p>
<p>??那么为什么收到中毒路由的路由器为什么要回复一个毒性逆转的信息？这是因为如果不回复的话，那么发送中毒路由的路由器就会一直以广播的形式发送中毒路由，直到相邻的路由器收到并回复一个毒性逆转的信息。</p>
<h1 id="7-多播"><a href="#7-多播" class="headerlink" title="7 多播"></a>7 多播</h1><p>UDP的时候会用到多播</p>
<h2 id="7-1-IGMP协议"><a href="#7-1-IGMP协议" class="headerlink" title="7.1 IGMP协议"></a>7.1 IGMP协议</h2><p>internet group message protol， 网络组管理协议<br>负责收集和解释一个网络中的组成员信息<br>IGMP协议应用于路由器</p>
<ul>
<li>某主机加入新的多播组时，发送报文，并转发多播的关系给其他相邻主机或者路由</li>
<li>会周期性探寻，确认自身这个主机是否还在多播组内</li>
<li>无法直到总成员数</li>
<li>IGMP属于网络层的协议</li>
</ul>
<h2 id="7-2-MOSPF多播路由选择协议"><a href="#7-2-MOSPF多播路由选择协议" class="headerlink" title="7.2 MOSPF多播路由选择协议"></a>7.2 MOSPF多播路由选择协议</h2><p>多播开放最短通路优先（Multicast Open Shortest PathFirst，MOSPF）协议是OSPF协议的扩展<br>使用多播链路状态路由选择来创建源点基准树。<br>这个协议需要一个新的链路状态更新分组，把主机的单播地址和组地址或主机负责的地址联系起来，这个分组就称为组成员关系LSA。<br>此外，这个数可以保存在高速缓存中，以便以后有同样源点&#x2F;组地址对的分组可以使用它。<br>多播的其他更详细概念见<a target="_blank" rel="noopener" href="https://blog.csdn.net/williananjhon/article/details/94166311">链接</a></p>
<h1 id="附录-常见网络层命令"><a href="#附录-常见网络层命令" class="headerlink" title="附录 常见网络层命令"></a>附录 常见网络层命令</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">ifconfig　       <span class="comment"># 显示本机IP</span></span><br><span class="line">netstat -r       <span class="comment"># 显示路由表清单</span></span><br><span class="line">tcpdump　        <span class="comment"># 可显示硬件地址</span></span><br><span class="line">ping　baidu.com  <span class="comment"># 测试另一个主机是否可达</span></span><br><span class="line">traceroute　     <span class="comment"># 利用ICMP跟踪途径的所有路由</span></span><br><span class="line">route　         <span class="comment"># 命令可查看和修改路由表</span></span><br><span class="line">gated          <span class="comment"># 可查看IGP（内部网关协议）和EGP（外部网关协议）</span></span><br></pre></td></tr></table></figure>


        </section>
    </article>
</div>

            </div>
            <footer id="footer" class="footer">
    <div class="copyright">
        <span>187-9597-5517 &nbsp; 王鹏 @ <a href="https://cs.njupt.edu.cn/" target="_blank">njupt</a</span>
    </div>
</footer>

    </div>
</body>

</html>